<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script src="js/vue.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		<div id="app">
			<p>computed和watch都可以用于监听变量，但是有如下不同</p>
			<ul>
				<li>computed根据监听的变量来返回值，其重点不在监听事件的处理，而在返回值结果。且其结果是有进行缓存的，并不是每次都执行方法体</li>
				<li>watch主要为监听变量，可以没有返回值，其重点在监听事件处理本身。</li>
				<li>如果需要进行计算属性的定义，computed比watch写法简单的多。</li>
				<li>watch作为监听存在，不应过渡滥用，影响性能</li>
			</ul>
			<p>{{message1}}</p>
			<p>{{message2}}</p>
			<p>{{message3}}</p>
			<p>{{message4}}</p>
		</div>
	</body>
<script type="text/javascript">
var app = new Vue({
	el: '#app',
	data: {
		message1: "你想看什么1",
		message2: "你想看什么2",
		message4: ""
	},
	
	//使用computed属性来定义计算属性
	computed: {
		message3: function(){
			//message3依赖于message1和message2，所以如果message1和message2没有变化时，该方法返回值是被缓存的。
			console.log("测试缓存");  //在message1、message2不变的情况下，本处是不运行的
			return this.message1 + this.message2;
		}
	},
	
	//变量监听
	
	watch: {
		message1: function(val){
			console.log("测试没有缓存");
			this.message4 = val + this.message2;
		},
		message2: function(val){
			console.log("测试没有缓存");
			this.message4 = this.message2 + val;
		},
	}
});
console.log(app.message3);
console.log(app.message4);
app.message1 = "你还想看什么啊1";  //由于message1发生改变，相关的message3、message4()也将重新渲染
console.log(app.message3);
console.log(app.message4);
console.log(app.message3);
console.log(app.message4);
</script>
</html>
